﻿/**
* 在IE下将所有标签会自动转为大写，这里使用正则方式再转为小写,
* 将形如size=4的属性改为 size="4"，
* 使内容符合 xhtml 格式。
*/
(function(E, $){

var Consts = E.consts;

E.addFilter('xhtml', {
	type: 'out-html',
	
	replace: function( html ){
		if(typeof html !='string' || !html){return html;}
		var re;
		//对于个别没有结束标签的，加上反斜杠
		html = html.replace(/<(br|hr)>/ig, '<$1 />');
		
		//对于没有反斜杠结尾的img标签，加上反斜杠
		html = html.replace(/<(img[^>]*)([^\/])>/ig, '<$1$2 />');
		
		if( !Consts.IE ){
			// 如果不是IE浏览器，则仅需要上面的处理
			return html;
		}
		
		// IE浏览器换需要继续进行下面的处理
		
		//将形如<A>或</A>这样标签的转为<a></a>
		re=/(<\/?)([A-Z]+)>/g;
		html = html.replace(re, function($0, $1, $2){
			return $1+$2.toLowerCase()+'>';
		});
		
		//转换带属性的标签，和大写的属性名，以及没有引号的属性值
		//注意：replace 里面的 function 的参数必须从$0开始，即便是仅需要$1，$2等
		re=/<([A-Z]+)([^>]*)>/g;
		html = html.replace(re, function($0,$1,$2){
			//将大写的属性名转为小写
			$2 = $2.replace(/\s([A-Z]+)=/g, function($_0, $_1){
				return ' '+$_1.toLowerCase() + '=';
			});
			
			//将不带双引号的属性值加上双引号
			$2 = $2.replace(/\s+(\w+=)(\w[^\s]+)/g, function($_0, $_1, $_2){
				return ' '+$_1 + '"' + $_2 + '"';
			});
			return '<'+$1.toLowerCase()+ $2 +'>';
		});

		return html;
	}
});


})(jQEditor, jQuery);